home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-06 / delaycmd.zip / DELAYCMD.C < prev    next >
C/C++ Source or Header  |  1993-03-18  |  3KB  |  91 lines

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <process.h>
  5.  
  6. // delaycmd.nlm
  7. // This NLM sends a command to the system console after the specified delay
  8. // This NLM is by no means foolproof; it has the following known restrictions
  9. // at this time:
  10. //   - The command will be blasted to the system console regardless of
  11. //     whether any console input is currently being typed on the console by
  12. //     the operator, interleaving with his input.
  13.  
  14.  
  15. /*-----------------------------------------------------------------------*/
  16. void main( int argc, char *argv[] );
  17. int  BTISystem( char *command );
  18. /*-----------------------------------------------------------------------*/
  19.  
  20. void main( int argc, char *argv[] )
  21. {
  22.  unsigned int DelaySecs;
  23.  unsigned int AnyError = 0;
  24.  
  25.  if (argc == 3)
  26.    {
  27.     DelaySecs = atoi(argv[1]);
  28.     if ((DelaySecs < 1) || (DelaySecs > 3600))
  29.        AnyError = 1;
  30.    }
  31.  else
  32.    {
  33.     AnyError = 1;
  34.    }
  35.  if (AnyError)
  36.    {
  37.     printf("delaycmd Usage:\n"
  38.            "   LOAD DELAYCMD <seconds> \"command to execute\"\n"
  39.            "    where:  <seconds> = 1 to 3600\n"
  40.            "    and the \"command to execute\" must be in quotes\n"
  41.            "For example:\n"
  42.            "   LOAD DELAYCMD 5 \"LOAD MYNLM\"\n");
  43.     exit(0);
  44.    }
  45.  
  46.  printf("Delaycmd has scheduled \"%s\" in %d seconds\n", argv[2], DelaySecs);
  47.  delay(DelaySecs*1000);
  48.  
  49.  BTISystem(argv[2]);
  50.  
  51. }
  52.  
  53.  
  54. /*-------------------------------------------------------------------------*/
  55. /*  This function sends the supplied string to the NW v3.11 system console */
  56. /*  Input string does not need to include a CR character                   */
  57. /*  There is no return value.                                              */
  58. /*  Return is after the command has been completely sent.                  */
  59. /*  There is not attempt to synchronize multiple threads calling this      */
  60. /*   routine simultaneously; output may interleave.                        */
  61. /*-------------------------------------------------------------------------*/
  62. int BTISystem(char *command)
  63. {
  64.  LONG  OldScrID = GetCurrentScreen();
  65.  LONG  NewScrID = CreateScreen("System Console",0);
  66.  
  67. //  Set the current screen to the system console
  68.  
  69.  if( OldScrID != NewScrID)
  70.     SetCurrentScreen(NewScrID);
  71.  
  72. //  Send the entire string to the console.  Do a ThreadSwitch
  73. //  after each character to allow the console to clear its buffer.
  74.  
  75.  for( ; *command; command++ )
  76.     ungetch(*command), ThreadSwitch();
  77.  
  78. //  Send the CR
  79.  
  80.  ungetch('\r');
  81.  
  82. //  Restore the screen
  83.  
  84.  if( OldScrID != NewScrID)
  85.     SetCurrentScreen(OldScrID);
  86.  
  87.  return 0;
  88. }
  89.  
  90.  
  91.